開始著手專案時,選擇資料庫也是一大關卡,資料庫主要有兩大類:關聯式資料庫(RDBMS)和非關聯式資料庫(NoSQL)。了解不同資料庫的特性,選擇適合專案的資料庫,進而提升開發效率。
關聯式資料庫RDBMS
穩定性高,因為資料都有一定的規範要求,使用SQL語法進行資料的增刪改查,能夠處理複雜的查詢以及多表關聯,常見的有MySQL、DB2,缺點則是擴展性較差,通常需要額外的配置和管理來處理。
註:DB2由IBM提供,安全性高,通常用於大型機構如政府機關、銀行業
非關聯式資料庫
最大特點是處理靈活非結構化的資料,擴展性高,特別適合即時且頻繁變更的資料,缺點則是一致性較差,若為嚴謹規範的架構,像是金融業,則不適合使用。
在我轉職學習的過程,主要是使用MySQL,而後在公司接觸的也是關聯式資料庫DB2,因此目前開發的小專案仍是選擇MySQL。儘管過去也有嘗試使用MongoDB,但程式寫法明顯與MySQL不同,預計這個小專案結束後,再來改寫使用MongoDB。
在專案初期需要與前端工程師合作,在還沒架設測試站的狀況下,曾使用Docker將MySQL資料庫與專案一起打包供前端使用,雖然有成功運行,但幾次下來發現操作繁瑣,且也耗費不少系統資源,為了提升開發效率,在開發階段決定改用 Java 的內嵌資料庫H2,這不僅讓開發過程更簡便,也大大提升了效率。
H2是Java中的輕量級內嵌式資料庫,透過下列配置就能讓前後端各自運行獨立的資料庫,而後期要切換到MySQL也能快速無痛轉換,不用調整專案架構,非常方便。
Spring Boot中,配置H2:
1.加入H2依賴
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
2.在application設置
#H2 DB驅動
spring.datasource.driver-class-name=org.h2.Driver
#H2 DB連結URL (./data/h2db是資料儲存的路徑)
spring.datasource.url=jdbc:h2:file:./data/h2db;
#H2 DB使用者帳密(預設如下)
spring.datasource.username=sa
spring.datasource.password=
#JPA設定(DDL結構更新策略可選 create, create-drop, update 等)
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
#H2 控制台訪問
spring.h2.console.enabled=true
spring.h2.console.settings.web-allow-others=true
spring.h2.console.path=/h2-console
在專案後期要改回MySQL,只需更新資料庫連接設定為MySQL的參數,不用修改程式架構;若是要保留數據,則要使用Flyway或Liquibase這些工具處理,因為資料結構在不同資料庫中仍有些不同,但因為我沒有要保留開發測試期間的數據,現階段就沒有特別使用此類工具。
Spring Boot中,配置MySQL:
1.加入依賴
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
2.在application設置
#MySQL DB驅動
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#MySQL DB連結URL
spring.datasource.url=jdbc:mysql://localhost:3306/yourdatabasename?serverTimezone=Asia/Taipei&characterEncoding=utf-8
#MySQL DB使用者帳密
spring.datasource.username=yourusername
spring.datasource.password=yourpassword
#JPA設定(ddl結構更新策略)
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.jpa.hibernate.ddl-auto=update
綜合上述,在小專案開發時,快速開發且測試基本查詢功能,可以使用MySQL,若要處理結構多變或大量即時資料,可以考慮使用MongoDB。